/**
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY. 
 * See the GNU General Public License for more details.
 * 
 * Copyright (C) 2011 CellObject.net
 */
package net.cellobject.javacodeformatter.log;

import net.cellobject.javacodeformatter.FormatterPlugin;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

/**
 * The logger of convenience for the Favorites plug-in.
 */
public class FormatterLog {
	/**
	 * Log the specified information.
	 * 
	 * @param message, a human-readable message, localized to the current locale.
	 */
	public static void logInfo(final String message) {
		log(IStatus.INFO, IStatus.OK, message, null);
	}

	/**
	 * Log the specified error.
	 * 
	 * @param exception, a low-level exception.
	 */
	public static void logError(final Throwable exception) {
		logError("Unexpected Exception", exception);
	}

	/**
	 * Log the specified error.
	 * 
	 * @param message, a human-readable message, localized to the current locale.
	 * @param exception, a low-level exception, or <code>null</code> if not applicable.
	 */
	public static void logError(final String message, final Throwable exception) {
		log(IStatus.ERROR, IStatus.OK, message, exception);
	}

	/**
	 * Log the specified information.
	 * 
	 * @param severity, the severity; one of the following: <code>IStatus.OK</code>, <code>IStatus.ERROR</code>,
	 * <code>IStatus.INFO</code>, or <code>IStatus.WARNING</code>.
	 * @param pluginId. the unique identifier of the relevant plug-in.
	 * @param code, the plug-in-specific status code, or <code>OK</code>.
	 * @param message, a human-readable message, localized to the current locale.
	 * @param exception, a low-level exception, or <code>null</code> if not applicable.
	 */
	public static void log(final int severity, final int code, final String message, final Throwable exception) {
		log(createStatus(severity, code, message, exception));
	}

	/**
	 * Create a status object representing the specified information.
	 * 
	 * @param severity, the severity; one of the following: <code>IStatus.OK</code>, <code>IStatus.ERROR</code>,
	 * <code>IStatus.INFO</code>, or <code>IStatus.WARNING</code>.
	 * @param pluginId, the unique identifier of the relevant plug-in.
	 * @param code, the plug-in-specific status code, or <code>OK</code>.
	 * @param message, a human-readable message, localized to the current locale.
	 * @param exception, a low-level exception, or <code>null</code> if not applicable.
	 * @return, the status object (not <code>null</code>).
	 */
	public static IStatus createStatus(final int severity, final int code, final String message, final Throwable exception) {
		return new Status(severity, FormatterPlugin.PLUGIN_ID, code, message, exception);
	}

	/**
	 * Log the given status.
	 * 
	 * @param status, the status to log.
	 */
	public static void log(final IStatus status) {
		FormatterPlugin.getDefault().getLog().log(status);
	}
}
